#ifndef OPERATIONDO_H
#define OPERATIONDO_H

#include <QObject>
#include <QMetaType>
#include <QModelIndex>

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>	OperationDO class represent an operation. It also responsible on what to display
///				in the properties window</summary>
///
/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
////////////////////////////////////////////////////////////////////////////////////////////////////

class OperationDO : public QObject 
{
	Q_OBJECT
	
public:
	OperationDO();
	OperationDO(QString type);
	OperationDO(const OperationDO &o);  
	~OperationDO();

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Sets the Operation's type</summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <param name="type">	[in] The Operation's type. </param>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void setOperationType(QString type);	

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Sets the Operation's thershold</summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <param name="thershold">	[in] The Operation's thershold. </param>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void setThershold(float thershold);

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Returns the Operation's type</summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <returns>	The Operation's type. </returns>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	QString getOperationType() const;	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Returns the Operation's thershold</summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <returns>	The Operation's thershold. </returns>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	float getThershold() const;

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Used by the properties model to return the appropriate data</summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <param name="index">	[in] The index. </param>
	/// <param name="role">	[in] The role. </param>
	/// <returns>	The appropriate data. </returns>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual QVariant data(const QModelIndex &index, int role) const = 0;
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Used by the properties model to save the appropriate data </summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <param name="index">	[in] The index. </param>
	/// <param name="value">	[in] The value to save. </param>
	/// <param name="role">	[in] The role. </param>	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual bool setData(const QModelIndex &index, const QVariant &value, int role) = 0;
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Used by the properties model to return the amount of rows </summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <returns>	[in] The amount of rows. </returns>	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual int rowCount(const QModelIndex &parent) const = 0;
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	Used by the properties model to return the amount of columns </summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/5/2012. </remarks>
	/// <returns>	[in] The amount of columns. </returns>	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual int columnCount(const QModelIndex &parent) const = 0;
	
protected:
	QString _operationType;
	float _thershold;
};

Q_DECLARE_METATYPE(OperationDO*);


#endif // OperationDO_H
